/**
 * 文件名：@HandlerMethodSequenceRequestBodyInterceptor.java <br/>
 * 包名：cn.efunbox.afw.web.mvc.interceptor <br/>
 * 项目名：afw-web <br/>
 * @author xtwin <br/>
 */
package cn.efunbox.afw.web.mvc.interceptor;

import java.lang.reflect.Type;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.core.MethodParameter;
import org.springframework.web.method.HandlerMethod;

import com.alibaba.fastjson.JSON;

/**
 * 类名：HandlerMethodSequenceRequestBodyInterceptor  <br />
 *
 * 功能：按照org.springframework.web.method.HandlerMethod的参数顺序进行body数据解析
 *
 * @author xtwin <br />
 * 创建时间：2016年7月25日 下午2:04:08  <br />
 * @version 2016年7月25日
 */
public class HandlerMethodParameterSequenceRequestBodyInterceptor extends AbstractHandlerMethodParameterRequestBodyInterceptor {

	/**
	 * 功能: 按照处理器方法的参数的顺序进行json解析 <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2016年7月25日 下午2:10:14<br/>
	 * 
	 * @param body
	 * @param request
	 * @param response
	 * @param handler
	 * @return <br/>
	 * @see cn.efunbox.afw.web.mvc.interceptor.AbstractRequestBodyInterceptor#parseBody(java.lang.String, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Object)
	 */
	@Override
	protected Object parseBody(String body, HttpServletRequest request, HttpServletResponse response, Object handler) {
		// 取得方法上的所有参数
		MethodParameter[] parameters = ((HandlerMethod) handler).getMethodParameters();
		
		Type[] types = new Type[parameters.length];
		for (int i = 0, len = parameters.length; i < len; i++) {
			// 依次取得每个参数的类型
			types[i] = parameters[i].getGenericParameterType();
		}
		
		// 使用fastjson进行解析
		if("[]".equals(body)){
			return JSON.parseArray(null, types);
		}
		return JSON.parseArray(body, types);
	}
}
